package 素数打印;

public class Demo {
    /**
     * 写一个命令行程序，
     * 要求：输出1~20000内的所有素数，按每行5个打印出来，并分析程序中最费时的函数是什么， 如何改进？
     */
    public static void main(String[] args) {
        int count = 0;
        
        // 2是唯一的偶数素数，单独处理
        System.out.print(2 + " ");
        count++;
        if(count % 5 == 0){
            System.out.printf("\n");
        }
        
        // 从3开始，只检查奇数
        for (int i = 3; i <= 20000; i += 2) {
            if(isPrime(i)){
                count++;
                System.out.print(i + " ");
                if(count % 5 == 0){
                    System.out.printf("\n");
                }
            }
        }
    }
    
    // 优化的素数判断方法
    public static boolean isPrime(int num) {
        // 只需检查到sqrt(num)
        for(int j = 3; j * j <= num; j += 2){
            if(num % j == 0){
                return false;
            }
        }
        return true;
    }
}
